
package generadoresExcel;

import java.io.FileOutputStream;
import java.util.ArrayList;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Font;
import trabajadores.*;

/**
 *
 * @author Santy
 */
public class GeneradorExcel {
    
    // Fichero donde se genera el Excel
    private String fileName = "trabajadores.xls";
    // Número de la fila Excel que se está insertando
    private short rowNumber;
    // Libro que se está generando. Se crea en el constructor.
    private HSSFWorkbook book;
    // Hoja que se va generando. Se crea en el constructor.
    private HSSFSheet sheet;
    // Número de columnas que va a tener la hoja.
    private int numberOfColumns = 6;
    // Estilo para la cabecera de títulos. Se crea en el constructor.
    private HSSFCellStyle headline_style;
    // Fuente para la cabecera de títulos: en negrita.
    // Se crea en el constructor.
    private HSSFFont headline_font;
    

    public GeneradorExcel()
    {
        
        // Crea el libro y la hoja
        
        book = new HSSFWorkbook();
        sheet = book.createSheet();

        // Crea el estilo headline con su fuente correspondiente
        
        headline_style = book.createCellStyle();
        headline_font = book.createFont();
        headline_font.setBoldweight(Font.BOLDWEIGHT_BOLD);
        headline_style.setFont(headline_font);
        
    }
    
    public void generar(ArrayList<Trabajador> trabajadores)    
    {
        System.out.println("Exportando a Excel");
        try {
            FileOutputStream elFichero = new FileOutputStream(fileName);
            
            rowNumber = 0;

            generarTitulosCabecera();
            generarDatosPaises(trabajadores);
            
            //Se alinea el tamaño de las celdas al tamaño del texto
            for(int j = 0; j < numberOfColumns; j++) {
                sheet.autoSizeColumn((short) j);
            }
            
            book.write(elFichero);
            elFichero.close();
            
            System.out.println("Excel exportado");
            
        } catch (Exception e) {
                e.printStackTrace(System.err);
        }
    }
    
    private void generarTitulosCabecera()
    {
        // Crea la fila para la cabecera
        HSSFRow row = sheet.createRow(rowNumber++);
        
        // Crea la celda con contenido 'Nombre'
        
        HSSFCell cell = row.createCell(0, HSSFCell.CELL_TYPE_STRING);
        cell.setCellStyle(headline_style);
        cell.setCellValue("Nombre");
                
        // Crea la celda con contenido 'Apellidos'
        
        cell = row.createCell(1, HSSFCell.CELL_TYPE_STRING);
        cell.setCellStyle(headline_style);
        cell.setCellValue("Apellidos");
                
        // Crea la celda con contenido 'Nif'
        
        cell = row.createCell(2, HSSFCell.CELL_TYPE_STRING);
        cell.setCellStyle(headline_style);
        cell.setCellValue("Nif");
        
        // Crea la celda con contenido 'Telefono'
        
        cell = row.createCell(3, HSSFCell.CELL_TYPE_STRING);
        cell.setCellStyle(headline_style);
        cell.setCellValue("Telefono");
        
          // Crea la celda con contenido 'Coste'
        
        cell = row.createCell(4, HSSFCell.CELL_TYPE_STRING);
        cell.setCellStyle(headline_style);
        cell.setCellValue("Coste");
        
         // Crea la celda con contenido 'Sexo'
        
        cell = row.createCell(5, HSSFCell.CELL_TYPE_STRING);
        cell.setCellStyle(headline_style);
        cell.setCellValue("Sexo");
                                
     }

    private void generarDatosPaises(ArrayList<Trabajador> trabajadores)
    {
        for(Trabajador trabajador : trabajadores)
        {
            generarDatosUnPais(trabajador);
        }
    }
    
    private void generarDatosUnPais(Trabajador trabajador)
    {
        HSSFRow row = sheet.createRow(rowNumber++);

        // Se introduce el nombre del trabajador
        
        HSSFCell cell = row.createCell(0);
        cell.setCellValue(trabajador.getNombre());
        
        // Se introducen los apellidos del trabajador
        
        cell = row.createCell(1);
        cell.setCellValue(trabajador.getApellido1() + " " + trabajador.getApellido2());
        
        // Se introduce el Nif del trabajador
        
        cell = row.createCell(2);
        cell.setCellValue(trabajador.getNif());
        
        // Se introduce el telefono del trabajador
        
        cell = row.createCell(3);
        cell.setCellValue(trabajador.getTelefono());
        
        // Se introduce el coste del trabajador
        
        cell = row.createCell(4);
        cell.setCellValue(trabajador.coste());
        
        // Se introduce el sexo del trabajador
        
        cell = row.createCell(5);
        cell.setCellValue(trabajador.getSexo().toString());

    }
    
}
